import axios from 'axios';

// 设置正确的API基础URL
const API_URL = '';

const api = axios.create({
  baseURL: API_URL,
  headers: {
    'Content-Type': 'application/json',
    'X-Requested-With': 'XMLHttpRequest'
  },
  withCredentials: true
});

// 请求拦截器
api.interceptors.request.use(
  (config) => {
    console.log('发送请求:', config.method.toUpperCase(), config.url, config.data);
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    
    return config;
  },
  (error) => {
    console.error('请求拦截器错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
api.interceptors.response.use(
  (response) => {
    console.log('收到响应:', response.status, response.config.url, response.data);
    
    // 如果响应是预检请求的响应，直接返回
    if (response.status === 204) {
      return response;
    }

    // 检查响应数据是否存在
    if (!response.data) {
      console.error('响应数据为空');
      return Promise.reject(new Error('服务器响应数据格式错误'));
    }

    // 如果响应数据是直接的错误消息
    if (typeof response.data === 'string') {
      console.error('响应数据是字符串:', response.data);
      return Promise.reject(new Error(response.data));
    }

    // 原样返回数据让调用者处理
    return response.data;
  },
  (error) => {
    console.error('响应拦截器错误:', error);
    
    // 处理401错误，跳转登录页
    if (error.response && error.response.status === 401) {
      localStorage.removeItem('token');
      return Promise.reject(new Error('登录已过期，请重新登录'));
    }
    
    // 处理403错误
    if (error.response && error.response.status === 403) {
      return Promise.reject(new Error('没有权限访问该资源'));
    }
    
    // 处理后端返回的错误信息
    if (error.response && error.response.data) {
      // 如果错误数据是字符串
      if (typeof error.response.data === 'string') {
        return Promise.reject(new Error(error.response.data));
      }
      // 如果错误数据是对象
      if (error.response.data.message) {
        return Promise.reject(new Error(error.response.data.message));
      }
    }
    
    // 处理网络错误
    if (!error.response) {
      return Promise.reject(new Error('网络连接失败，请检查网络'));
    }
    
    return Promise.reject(new Error('请求失败，请稍后重试'));
  }
);

export const authApi = {
  // 账号密码登录
  login: async (username, password) => {
    try {
      const response = await api.post('/api/auth/login', { username, password });
      console.log('登录响应:', response);
      
      if (response.code === 200) {
        return response.data;
      }
      
      throw new Error(response.message || '登录失败');
    } catch (error) {
      console.error('登录错误:', error);
      throw error;
    }
  },
  
  // 发送验证码
  sendVerifyCode: async (phone) => {
    try {
      const response = await api.post('/api/auth/code/send', { phone });
      
      if (response.code === 200) {
        return response.data;
      }
      
      throw new Error(response.message || '发送验证码失败');
    } catch (error) {
      console.error('发送验证码错误:', error);
      throw error;
    }
  },
  
  // 验证码登录
  loginWithCode: async (phone, code) => {
    try {
      const response = await api.post('/api/auth/login/code', { phone, code });
      
      if (response.code === 200) {
        return response.data;
      }
      
      throw new Error(response.message || '登录失败');
    } catch (error) {
      console.error('验证码登录错误:', error);
      throw error;
    }
  },
};

export default api; 